// Promise.all()   一个失败就全失败，所有成功才成功
// Promise.race()  赛跑，跑得快就用哪个
// Promise.allSettled()  成功和失败都返回

// 中断 abort，不要promise这次的结果，不是真的中断promise

let p1 = new Promise((resolve, reject) => {
  setTimeout(function () {
    console.log('成功了');
    resolve('1');
  }, 3000);
});

function wrap(p1) {
  // 用户传递的p1和我们自己写一个p2组成个队列
  let abort;
  let p2 = new Promise((resolve, reject) => {
    abort = reject;
  });
  let newP2 = Promise.race([p1, p2]); // 谁先失败就走谁
  newP2.abort = abort;
  return newP2;
}

let p = wrap(p1);
p.then((res) => {
  console.log(res);
}).catch((err) => {
  console.log(err);
});

setTimeout(() => {
  // 超过2s就让这个promise失败掉
  p.abort();
  console.log('失败了');
}, 2000);
